#==============================================================================
# ■ Game_Battler (分割定义 1)
#------------------------------------------------------------------------------
# 　处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
# 超级类来使用。
#==============================================================================

class Game_Battler
    #--------------------------------------------------------------------------
    # ● 定义实例变量
    #--------------------------------------------------------------------------
    attr_reader   :battler_name             # 战斗者 文件名
    attr_reader   :battler_hue              # 战斗者 色相
    attr_reader   :hp                       # HP
    attr_reader   :sp                       # SP
    attr_reader   :states                   # 状态
    attr_accessor :hidden                   # 隐藏标志
    attr_accessor :immortal                 # 不死身标志
    attr_accessor :damage_pop               # 显示伤害标志
    attr_accessor :damage                   # 伤害值
    attr_accessor :critical                 # 会心一击标志
    attr_accessor :animation_id             # 动画 ID
    attr_accessor :animation_hit            # 动画 击中标志
    attr_accessor :white_flash              # 白色屏幕闪烁标志
    attr_accessor :blink                    # 闪烁标志
    #--------------------------------------------------------------------------
    # ● 初始化对像
    #--------------------------------------------------------------------------
    def initialize
      @battler_name = ""
      @battler_hue = 0
      @hp = 0
      @sp = 0
      @states = []
      @states_turn = {}
      @maxhp_plus = 0
      @maxsp_plus = 0
      @str_plus = 0
      @dex_plus = 0
      @agi_plus = 0
      @int_plus = 0
      @hidden = false
      @immortal = false
      @damage_pop = false
      @damage = nil
      @critical = false
      @animation_id = 0
      @animation_hit = false
      @white_flash = false
      @blink = false
      @current_action = Game_BattleAction.new
    end
    #--------------------------------------------------------------------------
    # ● 获取 MaxHP
    #--------------------------------------------------------------------------
    def maxhp
      n = [[base_maxhp + @maxhp_plus, 0].max, 999999999999999999999999999999999999].min
      for i in @states
        n *= $data_states[i].maxhp_rate / 100.0
      end
      n = [[Integer(n), 0].max, 999999999999999999999999999999999999].min
      return n
    end
    #--------------------------------------------------------------------------
    # ● 获取 MaxSP
    #--------------------------------------------------------------------------
    def maxsp
      n = [[base_maxsp + @maxsp_plus, 0].max, 999999].min
      for i in @states
        n *= $data_states[i].maxsp_rate / 100.0
      end
      n = [[Integer(n), 0].max, 999999].min
      return n
    end
    #--------------------------------------------------------------------------
    # ● 获取力量
    #--------------------------------------------------------------------------
    def str
      n = [[base_str + @str_plus, 0].max, 999999999999999999999999999999999999].min
      for i in @states
        n *= $data_states[i].str_rate / 100.0
      end
      n = [[Integer(n), 0].max, 999999999999999999999999999999999999].min
      return n
    end
    #--------------------------------------------------------------------------
    # ● 获取灵巧
    #--------------------------------------------------------------------------
    def dex
      n = [[base_dex + @dex_plus, 0].max, 999999999999999999999999999999999999].min
      for i in @states
        n *= $data_states[i].dex_rate / 100.0
      end
      n = [[Integer(n), 0].max, 999999999999999999999999999999999999].min
      return n
    end
    #--------------------------------------------------------------------------
    # ● 获取速度
    #--------------------------------------------------------------------------
    def agi
      n = [[base_agi + @agi_plus, 0].max, 99999].min
      for i in @states
        n *= $data_states[i].agi_rate / 100.0
      end
      n = [[Integer(n), 0].max, 99999].min
      return n
    end
    #--------------------------------------------------------------------------
    # ● 获取魔力
    #--------------------------------------------------------------------------
    def int
      n = [[base_int + @int_plus, 0].max, 999999999999999999999999999999999999].min
      for i in @states
        n *= $data_states[i].int_rate / 100.0
      end
      n = [[Integer(n), 0].max, 999999999999999999999999999999999999].min
      return n
    end
    #--------------------------------------------------------------------------
    # ● 设置 MaxHP
    #     maxhp : 新的 MaxHP
    #--------------------------------------------------------------------------
    def maxhp=(maxhp)
      @maxhp_plus += maxhp - self.maxhp
      @maxhp_plus = [[@maxhp_plus, -999999999999999999999999999999999999].max, 999999999999999999999999999999999999].min
      @hp = [@hp, self.maxhp].min
    end
    #--------------------------------------------------------------------------
    # ● 设置 MaxSP
    #     maxsp : 新的 MaxSP
    #--------------------------------------------------------------------------
    def maxsp=(maxsp)
      @maxsp_plus += maxsp - self.maxsp
      @maxsp_plus = [[@maxsp_plus, -999999].max, 999999].min
      @sp = [@sp, self.maxsp].min
    end
    #--------------------------------------------------------------------------
    # ● 设置力量
    #     str : 新的力量
    #--------------------------------------------------------------------------
    def str=(str)
      @str_plus += str - self.str
      @str_plus = [[@str_plus, -999999999999999999999999999999999999].max, 999999999999999999999999999999999999].min
    end
    #--------------------------------------------------------------------------
    # ● 设置灵巧
    #     dex : 新的灵巧
    #--------------------------------------------------------------------------
    def dex=(dex)
      @dex_plus += dex - self.dex
      @dex_plus = [[@dex_plus, -999999999999999999999999999999999999].max, 999999999999999999999999999999999999].min
    end
    #--------------------------------------------------------------------------
    # ● 设置速度
    #     agi : 新的速度
    #--------------------------------------------------------------------------
    def agi=(agi)
      @agi_plus += agi - self.agi
      @agi_plus = [[@agi_plus, -99999].max, 99999].min
    end
    #--------------------------------------------------------------------------
    # ● 设置魔力
    #     int : 新的魔力
    #--------------------------------------------------------------------------
    def int=(int)
      @int_plus += int - self.int
      @int_plus = [[@int_plus, -999999999999999999999999999999999999].max, 999999999999999999999999999999999999].min
    end
    #--------------------------------------------------------------------------
    # ● 获取命中率
    #--------------------------------------------------------------------------
    def hit
      n = 100
      for i in @states
        n *= $data_states[i].hit_rate / 100.0
      end
      return Integer(n)
    end
    #--------------------------------------------------------------------------
    # ● 获取攻击力
    #--------------------------------------------------------------------------
    def atk
      n = base_atk
      for i in @states
        n *= $data_states[i].atk_rate / 100.0
      end
      return Integer(n)
    end
    #--------------------------------------------------------------------------
    # ● 获取物理防御
    #--------------------------------------------------------------------------
    def pdef
      n = base_pdef
      for i in @states
        n *= $data_states[i].pdef_rate / 100.0
      end
      return Integer(n)
    end
    #--------------------------------------------------------------------------
    # ● 获取魔法防御
    #--------------------------------------------------------------------------
    def mdef
      n = base_mdef
      for i in @states
        n *= $data_states[i].mdef_rate / 100.0
      end
      return Integer(n)
    end
    #--------------------------------------------------------------------------
    # ● 获取回避修正
    #--------------------------------------------------------------------------
    def eva
      n = base_eva
      for i in @states
        n += $data_states[i].eva
      end
      return n
    end
    #--------------------------------------------------------------------------
    # ● 更改 HP
    #     hp : 新的 HP
    #--------------------------------------------------------------------------
    def hp=(hp)
      @hp = [[hp, maxhp].min, 0].max
      # 解除附加的战斗不能状态
      for i in 1...$data_states.size
        if $data_states[i].zero_hp
          if self.dead?
            add_state(i)
          else
            remove_state(i)
          end
        end
      end
    end
    #--------------------------------------------------------------------------
    # ● 更改 SP
    #     sp : 新的 SP
    #--------------------------------------------------------------------------
    def sp=(sp)
      @sp = [[sp, maxsp].min, 0].max
    end
    #--------------------------------------------------------------------------
    # ● 全回复
    #--------------------------------------------------------------------------
    def recover_all
      @hp = maxhp
      @sp = maxsp
      for i in @states.clone
        remove_state(i)
      end
    end
    #--------------------------------------------------------------------------
    # ● 获取当前的动作
    #--------------------------------------------------------------------------
    def current_action
      return @current_action
    end
    #--------------------------------------------------------------------------
    # ● 确定动作速度
    #--------------------------------------------------------------------------
    def make_action_speed
      @current_action.speed = agi + rand(10 + agi / 4)
    end
    #--------------------------------------------------------------------------
    # ● 战斗不能判定
    #--------------------------------------------------------------------------
    def dead?
      return (@hp == 0 and not @immortal)
    end
    #--------------------------------------------------------------------------
    # ● 存在判定
    #--------------------------------------------------------------------------
    def exist?
      return (not @hidden and (@hp > 0 or @immortal))
    end
    #--------------------------------------------------------------------------
    # ● HP 0 判定
    #--------------------------------------------------------------------------
    def hp0?
      return (not @hidden and @hp == 0)
    end
    #--------------------------------------------------------------------------
    # ● 可以输入命令判定
    #--------------------------------------------------------------------------
    def inputable?
      return (not @hidden and restriction <= 1)
    end
    #--------------------------------------------------------------------------
    # ● 可以行动判定
    #--------------------------------------------------------------------------
    def movable?
      return (not @hidden and restriction < 4)
    end
    #--------------------------------------------------------------------------
    # ● 防御中判定
    #--------------------------------------------------------------------------
    def guarding?
      return (@current_action.kind == 0 and @current_action.basic == 1)
    end
    #--------------------------------------------------------------------------
    # ● 休止中判定
    #--------------------------------------------------------------------------
    def resting?
      return (@current_action.kind == 0 and @current_action.basic == 3)
    end
  end
  